/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package util.respaldar;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import util.fechaYhora.Fecha;
import util.mensajes.Mensaje;

/**
 *
 * @author Patricio
 */
public class Respaldo {

    private Statement sen = null;
    private Connection con = null;
    private ResultSet rs = null;

    public Respaldo(Connection conexion) {
        con = conexion;
    }

    /**
     * Recuerda que tienes que crear una tabla con los siguientes campos:
     * <br>create table respaldos( <br>sem_res numeric, <br>ano_res numeric
     * <br>);
     *
     * @param baseDeDatosARespaldar
     * @param rutaDelRespaldo
     * @param diaDeRespaldo
     * @param mensaje
     */
    public void respaldarBD(String baseDeDatosARespaldar, String rutaDelRespaldo, String diaDeRespaldo, String mensaje) {
        if (Fecha.getNomDia().equalsIgnoreCase(diaDeRespaldo) || !seRespaldo()) {
            try {
                sen = this.con.createStatement();
                sen.execute("BACKUP DATABASE [" + baseDeDatosARespaldar + "] TO  DISK = N'" + rutaDelRespaldo + Fecha.getDia() + Fecha.getMes() + Fecha.getAño() + "-BD-" + baseDeDatosARespaldar + ".bak' WITH NOFORMAT, NOINIT,  NAME = N'Base de datos-Copia de seguridad-" + Fecha.getFecha(true, false) + "', SKIP, NOREWIND, NOUNLOAD,  STATS = 10");
                sen.close();

                sen = con.createStatement();
                sen.execute("insert into respaldo values(" + Fecha.getSemanaDelAño() + ", " + Fecha.getAño() + ")");
                sen.close();

                if (mensaje != null) {
                    javax.swing.JOptionPane.showMessageDialog(null, mensaje, "Información de Respaldo", javax.swing.JOptionPane.INFORMATION_MESSAGE);
                }

            } catch (SQLException ex) {
            }
        }
    }

    public void respaldarBD(String baseDeDatosARespaldar, String rutaDelRespaldo) {
        try {
            sen = this.con.createStatement();
            sen.execute("BACKUP DATABASE [" + baseDeDatosARespaldar + "] TO  DISK = N'" + rutaDelRespaldo + Fecha.getDia() + Fecha.getMes() + Fecha.getAño() + "-BD-" + baseDeDatosARespaldar + ".bak' WITH NOFORMAT, NOINIT,  NAME = N'Base de datos-Copia de seguridad-" + Fecha.getFecha(true, false) + "', SKIP, NOREWIND, NOUNLOAD,  STATS = 10");
            sen.close();
            Mensaje.informacion("Información de Respaldo", "Base de Datos Respaldada con Éxito");
        } catch (SQLException ex) {
            Mensaje.error("Error al tratar de Respaldar BD\n" + ex.getMessage());
        }
    }

    private boolean seRespaldo() {
        boolean respuesta = false;
        try {
            sen = con.createStatement();
            rs = sen.executeQuery("select sem_res from respaldo where sem_res = " + Fecha.getSemanaDelAño() + " and ano_res = '" + Fecha.getAño() + "'");

            if (rs.next()) {
                respuesta = true;
            }
            sen.close();
            return respuesta;
        } catch (SQLException ex) {
            return respuesta;
        }
    }
}
